home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmigaPlus / Tools / Development / RxMUI / Examples / SendMsgFun.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  2004-01-31  |  4.1 KB  |  146 lines

  1. /* Send messages as email or news
  2. **
  3. ** SendMsgFun 2.1 (16.3.2001)
  4. **/
  5.  
  6. signal on halt
  7. signal on break_c
  8. signal on break_d
  9. signal on syntax
  10. signal on error
  11.  
  12. call init
  13. call start()
  14. exit
  15.  
  16. /***************************************************************************/
  17. init: procedure expose global. var.
  18.     call VarToStem("var.#?")
  19.     global.MacroNotify=var.MacroNotify
  20.     call MacroNotifyJoin(global.MacroNotify)
  21.     global.done=1
  22.     return
  23. /***************************************************************************/
  24. start: procedure expose global. var.
  25.  
  26.     global.eol="D0A"x
  27.  
  28.     call SetSocketBaseSingle("BREAKMASK",or(2**12,2**13))
  29.  
  30.     call info "Resolving <"var.Host">..."
  31.     remote.AddrAddr=resolve(var.Host)
  32.     if remote.AddrAddr==-1 then call err "Host <"var.Host"> not found."
  33.     remote.AddrPort=var.HostPort
  34.  
  35.     global.sock=socket("inet","stream")
  36.     if global.sock<0 then call err "Can't create my socket."
  37.  
  38.     call info "Connecting to <"var.Host":"var.HostPort">..."
  39.     res=connect(global.sock,"remote")
  40.     if res<0 then call err "Can't connect to <"var.Host":"var.HostPort"> ("ErrorString()")"
  41.  
  42.     if GetSockName(global.sock,"locale")<0 then call err("Not enogh memory")
  43.  
  44.     call info("Entering...")
  45.     call rec
  46.  
  47.     call info("Sending message...")
  48.  
  49.     msg=,
  50.     "Message-ID: <SendMsg"time(s)"@"locale.addraddr">" || global.eol ||,
  51.     "From:" var.Name "<"var.EMail">" || global.eol ||,
  52.     "Subject:" var.Subject || global.eol || ,
  53.     "Date:" GMTInetDate() || global.eol
  54.  
  55.     if var.News then do
  56.  
  57.         call sen "POST"
  58.         call rec
  59.  
  60.         msg=msg || ,
  61.         "Newsgroups:" var.To || global.eol ||,
  62.         "X-Newsposter: sendmsg/2.0" global.eol
  63.     end
  64.     else do
  65.         call sen "MAIL FROM: <"var.EMail">"
  66.         call rec
  67.  
  68.         call sen "RCPT TO: <"var.To">"
  69.         call rec
  70.  
  71.         call sen "DATA"
  72.         call rec
  73.  
  74.         msg=msg ||,
  75.         "To: <"var.To">" || global.eol ||,
  76.         "X-Mailer: sendmsg/1.0"
  77.     end
  78.  
  79.     call sen msg
  80.  
  81.     call sen var.Text
  82.  
  83.     call sen global.eol || "."
  84.     call rec
  85.  
  86.     call sen "QUIT"
  87.     call rec
  88.  
  89.     call info("Done.")
  90.  
  91.     return
  92. /***********************************************************************/
  93. sen: procedure expose global.
  94. parse arg string
  95.     string=string || global.eol
  96.     if send(global.sock,string)~=length(string) then call err("Send error" ErrorString())
  97.     return
  98. /***********************************************************************/
  99. rec: procedure expose global.
  100.     if recv(global.sock,"BUF",256)<0 then call err("Recv error" ErrorString())
  101.     parse var BUF code rest (global.eol)
  102.     if code>=400 then call err("Error from server: ("code")"rest)
  103.     return
  104. /***********************************************************************/
  105. GMTInetDate: procedure expose global.
  106.     m.1="Jan";m.2="Feb";m.3="Mar";m.4="Apr";m.5="May";m.6="Jun";m.7="Jul";m.8="Aug";m.9="Sep";m.10="Oct";m.11="Nov";m.12="Dec"
  107.     call GetDate("D","GMT")
  108.     parse value(FormatDate("D","%d %m %Y %H:%M:%S")) with i j rest
  109.     j=j%1
  110.     return i m.j || rest
  111. /***************************************************************************/
  112. info: procedure expose global.
  113. parse arg msg
  114.     call MacroNotifyInsertEvent(global.MacroNotify,"INFO",msg)
  115.     return
  116. /***************************************************************************/
  117. err: procedure expose global.
  118. parse arg msg,err
  119.     call info(msg)
  120.     exit
  121. /***************************************************************************/
  122. halt:
  123. break_c:
  124. break_d:
  125.     call CheckInit
  126.     call err "Interrupted"
  127. /***************************************************************************/
  128. syntax:
  129.     call CheckInit
  130.     call err "Syntax error" rc "at line" sigl":" ErrorText(rc)
  131. /***************************************************************************/
  132. error:
  133.     call CheckInit
  134.     call err "Error" rc "at line" sigl":" ErrorText(rc)
  135. /***************************************************************************/
  136. CheckInit:
  137.     if global.done~=1 then do
  138.         call VarToStem("var.#?")
  139.         call MacroNotifyJoin(var.MacroNotify)
  140.         global.MacroNotify=var.MacroNotify
  141.         global.done=1
  142.     end
  143.     return
  144. /***************************************************************************/
  145.  
  146.